package com.example.housingRentalSystem.service;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.UUID;

/**
 * @author 王硕
 * @version jdk21
 * @className FileService
 * @description
 * @date 2025/4/2 9:13
 */@Service
public class FileService {
    // 从配置文件中读取存储路径
    @Value("${file.upload.path}")
    private String uploadDir;

    // 从配置文件中读取域名（用于生成URL）
    @Value("${file.access-domain}")
    private String accessDomain;

    public String uploadImage(MultipartFile file) {
        try {
            // 1. 校验文件类型
            if (!isImageFile(file)) {
                throw new IllegalArgumentException("仅支持图片格式");
            }

            // 2. 生成唯一文件名（避免覆盖）
            String originalName = file.getOriginalFilename();
            String fileExt = originalName.substring(originalName.lastIndexOf("."));
            String savedName = UUID.randomUUID() + fileExt;

            // 3. 创建目标文件路径（增加 house-images 文件夹）
            Path targetPath = Paths.get(uploadDir, "house-images", savedName);
            Files.createDirectories(targetPath.getParent());

            // 4. 保存文件到磁盘
            Files.copy(file.getInputStream(), targetPath, StandardCopyOption.REPLACE_EXISTING);

            // 5. 生成访问URL（增加 house-images 文件夹）
            return "/uploads/house-images/" + savedName;
        } catch (IOException e) {
            throw new RuntimeException("文件上传失败", e);
        }
    }

    private boolean isImageFile(MultipartFile file) {
        String contentType = file.getContentType();
        return contentType != null && contentType.startsWith("image/");
    }
}